import type { ReviewRecord } from '@/utils/db/record'
import { putWordReviewRecord } from '@/utils/db/review-record'
import { atom } from 'jotai'
import { atomWithStorage } from 'jotai/utils'

type TReviewInfoAtomData = {
  isReviewMode: boolean
  reviewRecord: ReviewRecord | undefined
}

export function reviewInfoAtom(initialValue: TReviewInfoAtomData) {
  // 复习模式信息原子
  const storageAtom = atomWithStorage('reviewModeInfo', initialValue) // 将复习模式信息存储到 localStorage

  return atom(
    (get) => {
      return get(storageAtom) // 获取存储的复习模式信息
    },
    (get, set, updater: TReviewInfoAtomData | ((oldValue: TReviewInfoAtomData) => TReviewInfoAtomData)) => {
      // 设置复习模式信息
      const newValue = typeof updater === 'function' ? updater(get(storageAtom)) : updater // 计算新的复习模式信息

      // update reviewRecord to indexdb
      if (newValue.reviewRecord?.id) {
        // 如果有复习记录 ID，则更新到 IndexedDB
        putWordReviewRecord(newValue.reviewRecord) // 将复习记录保存到 IndexedDB
      }
      set(storageAtom, newValue) // 更新存储的复习模式信息
    }, //
  ) // 返回一个包含获取和设置复习模式信息的原子
}
